package com.zj.utils.utils.utilcode

import android.os.Environment
import java.io.File
import java.util.*

/**
 * @project mobile_survey_and_design
 * @author jiang zhu
 * @data 2019/12/6
 */
class FileUtil {

    private val filePath = Environment.getExternalStorageDirectory().absolutePath  //根路径

    /**
     * 获取手机全部数据库文件
     */
    fun getDatabaseFile(): ArrayList<File> {
        val lstFile = ArrayList<File>()//结果 List\
        getFile("$filePath/tencent/QQfile_recv", "db", true, lstFile)  //QQ的文件夹db
        getFile("$filePath/tencent/MicroMsg/Download", "db", true, lstFile) //微信的文件夹db
        getFile("$filePath/tencent/QQfile_recv", "dll", true, lstFile)  //QQ的文件夹db
        getFile("$filePath/tencent/MicroMsg/Download", "dll", true, lstFile) //微信的文件夹db
        return lstFile
    }

    /**
     * 获取手机全部zip文件
     */
    fun getZipFile(): ArrayList<File> {
        val lstFile = ArrayList<File>()//结果 List
        getFile("$filePath/tencent/QQfile_recv", "zip", true, lstFile)  //QQ的文件夹db
        getFile("$filePath/tencent/MicroMsg/Download", "zip", true, lstFile) //微信的文件夹db
        return lstFile
    }

    /**
     * 查找文件
     */
    fun queryDatabaseFile(query: String): ArrayList<File>  {
        val lstFile = ArrayList<File>()//结果 List
        getFile(query, "$filePath/bhne", "db", true,lstFile)  //公司目录
        getFile(query, "$filePath/tencent/QQfile_recv", "db", true,lstFile)  //QQ的文件夹db
        getFile(query, "$filePath/tencent/MicroMsg/Download", "db", true,lstFile) //微信的文件夹db
        getFile(query, "$filePath/tencent/QQfile_recv", "dll", true,lstFile)  //QQ的文件夹db
        getFile(query, "$filePath/tencent/MicroMsg/Download", "dll", true,lstFile) //微信的文件夹db
        return lstFile
    }


    /**
     * 查找文件
     */
    fun queryZipFile(query: String): ArrayList<File>  {
        val lstFile = ArrayList<File>()//结果 List
        getFile(query, "$filePath/bhne", "zip", true,lstFile)  //公司目录
        getFile(query, "$filePath/tencent/QQfile_recv", "zip", true,lstFile)  //QQ的文件夹db
        getFile(query, "$filePath/tencent/MicroMsg/Download", "zip", true,lstFile) //微信的文件夹db
        LocalFileTool.readFile(LocalFileTool.zipType, Utils.getApp()) { localPath ->
            for (path in localPath) {
                if (path.name.contains(query)) {
                    lstFile.add(path)  //系统中的zip包
                }
            }
        }
        return lstFile
    }



    /**
     * 获取系统中所有的指定类型文件
     *
     * @param path 搜索目录
     * @param extension 扩展名（类型）
     * @param isIterative 是否进入子文件夹
     * @param lstFile 结果文件集
     */
    private fun getFile(path: String, extension: String, isIterative: Boolean, lstFile: ArrayList<File>) {
        getFile("",path,extension,isIterative,lstFile)
    }


    /**
     * 获取系统中所有的指定类型文件
     *
     * @param name 查询关键字
     * @param path 搜索目录
     * @param extension 扩展名（类型）
     * @param isIterative 是否进入子文件夹
     * @param lstFile 结果文件集
     */
    private fun getFile(name: String, path: String, extension: String, isIterative: Boolean, lstFile: ArrayList<File>)//搜索目录，扩展名，是否进入子文件夹
    {

        val files = File(path).listFiles()

        if (files != null) {

            for (f in files) {
                if (f.isFile) {
                    if (f.path.substring(f.path.length - extension.length) == extension && f.name.contains(name))
                    //判断扩展名
                        lstFile.add(f)
                    if (!isIterative)
                        break
                } else if (f.isDirectory && f.path.indexOf("/.") == -1)
                //忽略点文件（隐藏文件/文件夹）
                    getFile(name, f.path, extension, isIterative, lstFile)
            }
        }
    }

}